package bancosys.tec.security.impl.services.incluir;

import jmine.tec.di.annotation.Injected;
import jmine.tec.services.annotations.Execution;
import jmine.tec.services.annotations.Input;
import jmine.tec.services.annotations.Output;
import jmine.tec.services.annotations.ServiceImplementor;
import jmine.tec.services.api.ActionsEnum;
import bancosys.tec.persist.dao.BaseDAO;
import bancosys.tec.security.impl.domain.Group;

/**
 * Servico para inclusão de grupo de usuários.
 * 
 * @author rodrigok
 */
@ServiceImplementor(action = ActionsEnum.INCLUIR)
public class GroupService {

    public static final String DATABASE_ID = "Database ID";

    public static final String IDENTIFICADOR = "Identificador";

    public static final String NOME = "Nome";
    
    // Injected
    private BaseDAO<Group> groupDAO;

    // Obrigatórios
    private String nome;

    // Opcional
    private Long databaseId;
    
    /**
     * Cria um novo grupo de usuário.
     * 
     * @return grupo de usuário.
     */
    @SuppressWarnings("deprecation")
	@Execution
    @Output(propertyName = IDENTIFICADOR)
    public Group execute() {
        Group group = this.groupDAO.createBean();
        group.setName(this.nome);
        if (this.databaseId != null) {
        	group.getController().getSessionFactory().getCurrentSession().save(group, this.databaseId);
        }
        group.getPersister().save();
        return group;
    }

    /**
     * @param groupDAO DAO da entidade {@link Group}
     */
    @Injected
    public void setGroupDAO(BaseDAO<Group> groupDAO) {
        this.groupDAO = groupDAO;
    }

    /**
     * @param databaseId the databaseId to set
     */
    @Input(fieldName = DATABASE_ID, required = false)
    public void setDatabaseId(Long databaseId) {
        this.databaseId = databaseId;
    }
    
    /**
     * @param nome Nome do grupo de usuário.
     */
    @Input(fieldName = NOME)
    public void setNome(String nome) {
        this.nome = nome;
    }

}
